package netty.test5ZeroCopy;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

public class NewIoClient {
    public static void main(String[] args) throws IOException {
        SocketChannel socketChannel=SocketChannel.open();
        socketChannel.connect(new InetSocketAddress("localhost",7003));
        String fileName="d:/a.txt";
        FileChannel fileChannel = new FileInputStream(fileName).getChannel();
        //记录时间
        long startTime=System.currentTimeMillis();
        //在linux 下一个transferTo 函数就可以完成传输，在windows 下，一次调用
        //只能发送8M的文件（window 下需要分段传输文件，而且要注意起点，传输时的位置，windows 下可参考这篇blog
        // https://blog.csdn.net/forget_me_not1991/article/details/80722386）
        long transferCount = fileChannel.transferTo(0, fileChannel.size(), socketChannel);// transferTo 底层就用了零拷贝
        System.out.println("发送的字节总数  "+transferCount+",耗时 "+(System.currentTimeMillis()-startTime));

        //关闭通道
        fileChannel.close();


    }
}
